<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta http-equiv="Content-Language" content="zh-CN"><title>udev
  中文手册 [金步国]</title><style>
@font-face { font-family: "JinBuGuoWebMono"; src: url("http://www.jinbuguo.com/d/mono.ttf") format("truetype"); }
* { font-family: "JinBuGuoWebMono", "Ubuntu Mono", "Consolas", "Menlo", monospace; }
body { margin:10px; }
h1 { text-align:center; background:#ddd; }
h2#auth_name { text-align:center; margin: 10px 5%; }

    a.headerlink {
      color: #c60f0f;
      font-size: 0.8em;
      padding: 0 4px 0 4px;
      text-decoration: none;
      visibility: hidden;
    }

    a.headerlink:hover {
      background-color: #c60f0f;
      color: white;
    }

    h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
      visibility: visible;
    }
</style><script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><h1>udev 中文手册</h1><h2 id="auth_name">译者：<strong><a href="../index.html">金步国</a></strong></h2><hr><h3>版权声明</h3><p>本文译者是一位开源理念的坚定支持者，所以本文虽然不是软件，但是遵照开源的精神发布。</p><ul><li>无担保：本文译者不保证译文内容准确无误，亦不承担任何由于使用此文档所导致的损失。</li><li>自由使用：任何人都可以自由的<u>阅读/链接/打印</u>此文档，无需任何附加条件。</li><li>名誉权：任何人都可以自由的<u>转载/引用/再创作</u>此文档，但必须保留译者署名并注明出处。</li></ul><h3>其他作品</h3><p>本文译者十分愿意与他人分享劳动成果，如果你对我的其他翻译作品或者技术文章有兴趣，可以在如下位置查看现有的作品集：</p><ul><li><a href="../index.html">金步国作品集</a> [ <a href="../index.html">http://www.jinbuguo.com/</a> ]</li></ul><h3>联系方式</h3><p>由于译者水平有限，因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好)，请来信指出，任何提高译文质量的建议我都将虚心接纳。</p><ul><li>Email(QQ)：70171448在QQ邮箱</li></ul><hr><a href="systemd.index.html">手册索引</a> ·
  <a href="systemd.directives.html">指令索引</a><span style="float:right">systemd-241</span><hr><div class="refentry"><a name="udev"></a><div class="titlepage"></div><div class="refnamediv"><h2>名称</h2><p>udev — 动态设备管理</p></div><div class="refsect1"><a name="id-1.4"></a><h2 id="描述">描述<a class="headerlink" title="Permalink to this headline" href="udev.html#%E6%8F%8F%E8%BF%B0">¶</a></h2><p>udev 能够处理设备事件、管理设备文件的权限、
    在 <code class="filename">/dev</code> 目录中创建额外的符号链接、重命名网络接口，等等。
    内核通常仅根据设备被发现的先后顺序给设备文件命名，
    因此很难在设备文件与物理硬件之间建立稳定的对应关系。
    而根据设备的物理属性或配置特征创建有意义的符号链接名称或网络接口名称，
    就可以在物理设备与设备文件名称之间建立稳定的对应关系。</p><p>udev守护进程(<a href="systemd-udevd.service.html#"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a>)
    直接从内核接收设备的插入、拔出、改变状态等事件，
    并根据这些事件的各种属性，
    到规则库中进行匹配，以确定触发事件的设备。
    被匹配成功的规则有可能提供额外的设备信息，这些信息可能会被记录到udev数据库中，
    也可能会被用于创建符号链接。</p><p>udev处理的所有设备信息都存储在udev数据库中，
    并且会发送给可能的设备事件的订阅者。
    可以通过 libudev 库访问udev数据库以及设备事件源。</p></div><div class="refsect1"><a name="id-1.5"></a><h2 id="规则文件">规则文件<a class="headerlink" title="Permalink to this headline" href="udev.html#%E8%A7%84%E5%88%99%E6%96%87%E4%BB%B6">¶</a></h2><p>规则文件分别位于：
      系统规则目录(<code class="filename">/usr/lib/udev/rules.d</code>)、
      运行时规则目录(<code class="filename">/run/udev/rules.d</code>)、
      本机规则目录(<code class="filename">/etc/udev/rules.d</code>)。
      所有的规则文件(无论位于哪个目录中)，统一按照文件名的字典顺序处理。
      对于不同目录下的同名规则文件，仅以优先级最高的目录中的那一个为准。
      具体说来就是：
      <code class="filename">/etc/</code> 的优先级最高、
      <code class="filename">/run/</code> 的优先级居中、
      <code class="filename">/usr/lib/</code> 的优先级最低。
      如果系统管理员想要屏蔽 <code class="filename">/usr/lib/</code> 目录中的某个规则文件，
      那么最佳做法是在 <code class="filename">/etc/</code> 目录中创建一个指向 <code class="filename">/dev/null</code> 的同名符号链接，
      即可彻底屏蔽 <code class="filename">/usr/lib/</code> 目录中的同名文件。
      注意，规则文件必须以 <code class="filename">.rules</code> 作为后缀名，否则将被忽略。</p><p>规则文件中以 "<code class="literal">#</code>" 开头的行以及空行将被忽略，
      其他不以 "<code class="literal">#</code>" 开头的非空行，每行必须至少包含一个"键-值"对。
      "键"有两种类型：匹配与赋值。
      如果某条规则的所有匹配键的值都匹配成功，那么就表示此条规则匹配成功，
      也就是此条规则中的所有赋值键都会被赋予指定的值。</p><p>一条匹配成功的规则可以：
      重命名网络接口、为某个设备文件添加一个软连接、运行一个指定的程序，
      等等。</p><p>每条规则都是由一系列逗号分隔的"键-值"对组成。
      根据操作符的不同，每个键都对应着一个唯一的操作。
      可用的操作符如下：</p><div class="variablelist"><dl class="variablelist"><dt id="=="><span class="term">"<code class="literal">==</code>"</span><a class="headerlink" title="Permalink to this term" href="udev.html#==">¶</a></dt><dd><p>(匹配)"等于"</p></dd><dt id="!="><span class="term">"<code class="literal">!=</code>"</span><a class="headerlink" title="Permalink to this term" href="udev.html#!=">¶</a></dt><dd><p>(匹配)"不等于"</p></dd><dt id="="><span class="term">"<code class="literal">=</code>"</span><a class="headerlink" title="Permalink to this term" href="udev.html#=">¶</a></dt><dd><p>(赋值)为键赋予指定的值。
            此键之前的值(可能是个列表)将被丢弃。</p></dd><dt id="+="><span class="term">"<code class="literal">+=</code>"</span><a class="headerlink" title="Permalink to this term" href="udev.html#+=">¶</a></dt><dd><p>(赋值)在键的现有值列表中增加此处指定的值。</p></dd><dt id="-="><span class="term">"<code class="literal">-=</code>"</span><a class="headerlink" title="Permalink to this term" href="udev.html#-=">¶</a></dt><dd><p>(赋值)在键的现有值列表中删除此处指定的值。</p></dd><dt id=":="><span class="term">"<code class="literal">:=</code>"</span><a class="headerlink" title="Permalink to this term" href="udev.html#:=">¶</a></dt><dd><p>(赋值)为键赋予指定的值，并视为最终值，也就是禁止被继续修改。</p></dd></dl></div><p>下面的"键"可用于匹配。注意，其中的某些键还可以针对父设备进行匹配，而不仅仅是生成设备事件的那个设备自身。
      如果在同一条规则中有多个键可以针对父设备进行匹配，那么仅在所有这些键都同时成功匹配同一个父设备时，才算匹配成功。
      [译者注]Linux通过sysfs以树状结构展示设备，例如硬盘是SCSI设备的孩子、SCSI设备又是ATA控制器的孩子、
      ATA控制器又是PCI总线的孩子。而你经常需要从父设备那里引用信息，
      比如硬盘的序列号就是通过父设备(SCSI设备)展现的。</p><div class="variablelist"><dl class="variablelist"><dt id="ACTION"><span class="term"><code class="varname">ACTION</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#ACTION">¶</a></dt><dd><p>匹配事件的动作。例如"add"表示插入一个设备。</p></dd><dt id="DEVPATH"><span class="term"><code class="varname">DEVPATH</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#DEVPATH">¶</a></dt><dd><p>匹配设备的路径(也就是该设备在sysfs文件系统下的相对路径)。[举例] /dev/sda1 对应的 devpath 是 /block/sda/sda1 (一般对应着 /sys/block/sda/sda1 目录)。</p></dd><dt id="KERNEL"><span class="term"><code class="varname">KERNEL</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#KERNEL">¶</a></dt><dd><p>匹配设备的内核名称。"内核名称"是指设备在sysfs里的名称，也就是默认的设备文件名称，例如"sda"。</p></dd><dt id="NAME"><span class="term"><code class="varname">NAME</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#NAME">¶</a></dt><dd><p>匹配网络接口的名称。
            仅在先前的规则中已将 NAME 键赋值的前提下，才可将此键用于匹配。</p></dd><dt id="SYMLINK"><span class="term"><code class="varname">SYMLINK</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#SYMLINK">¶</a></dt><dd><p>匹配指向此设备节点的软连接的名称。
            仅在先前的规则中已将 SYMLINK 键赋值的前提下，才可将此键用于匹配。
            可能有多个软连接指向同一个设备节点，但只需其中的一个匹配成功即可。
            </p></dd><dt id="SUBSYSTEM"><span class="term"><code class="varname">SUBSYSTEM</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#SUBSYSTEM">¶</a></dt><dd><p>匹配设备所属的子系统。例如"sound"或"net"</p></dd><dt id="DRIVER"><span class="term"><code class="varname">DRIVER</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#DRIVER">¶</a></dt><dd><p>匹配设备的驱动程序名称。
            仅在设备事件发生时，此设备确实正好绑定着一个驱动程序情况下，此键才会被设置。</p></dd><dt id="ATTR{文件}"><span class="term"><code class="varname">ATTR{<em class="replaceable"><code>文件</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#ATTR%7B%E6%96%87%E4%BB%B6%7D">¶</a></dt><dd><p>匹配设备在sysfs中的属性值。属性值中的尾部空白会被忽略，除非指定的值自身就包含尾部空白。
            [译者注]大括号中的"文件"是指设备路径(devpath)下的文件。
            例如，对于 /dev/sda1 来说，ATTR{size} 的含义其实是指 /sys/block/sda/sda1/size 文件的内容。
            </p></dd><dt id="SYSCTL{内核参数}"><span class="term"><code class="varname">SYSCTL{<em class="replaceable"><code>内核参数</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#SYSCTL%7B%E5%86%85%E6%A0%B8%E5%8F%82%E6%95%B0%7D">¶</a></dt><dd><p>匹配"内核参数"的值。[译者注]所谓"内核参数"其实是指 /proc/sys/ 中的"内核参数"。例如，可以用 SYSCTL{kernel/hostname} 匹配 /proc/sys/kernel/hostname 的值。
            </p></dd><dt id="KERNELS"><span class="term"><code class="varname">KERNELS</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#KERNELS">¶</a></dt><dd><p>匹配设备及其所有父设备的内核名称</p></dd><dt id="SUBSYSTEMS"><span class="term"><code class="varname">SUBSYSTEMS</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#SUBSYSTEMS">¶</a></dt><dd><p>匹配设备及其所有父设备所属的子系统</p></dd><dt id="DRIVERS"><span class="term"><code class="varname">DRIVERS</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#DRIVERS">¶</a></dt><dd><p>匹配设备及其所有父设备的驱动程序名称</p></dd><dt id="ATTRS{文件}"><span class="term"><code class="varname">ATTRS{<em class="replaceable"><code>文件</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#ATTRS%7B%E6%96%87%E4%BB%B6%7D">¶</a></dt><dd><p>匹配设备及其所有父设备在sysfs中的属性值。
            如果指定了多个 <code class="varname">ATTRS</code> 匹配，
            那么必须在同一个设备上全部匹配成功，才算最终匹配成功。
            属性值中的尾部空白会被忽略，除非指定的值自身就包含尾部空白。</p></dd><dt id="TAGS"><span class="term"><code class="varname">TAGS</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#TAGS">¶</a></dt><dd><p>匹配设备及其所有父设备的标签。</p></dd><dt id="ENV{设备属性}"><span class="term"><code class="varname">ENV{<em class="replaceable"><code>设备属性</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#ENV%7B%E8%AE%BE%E5%A4%87%E5%B1%9E%E6%80%A7%7D">¶</a></dt><dd><p>匹配设备的属性。例如 "DEVTYPE", "ID_PATH", "SYSTEMD_WANTS" 等等。[提示]可以通过 udevadm info --query=property /dev/sda 命令查看 /dev/sda 的所有属性。</p></dd><dt id="TAG"><span class="term"><code class="varname">TAG</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#TAG">¶</a></dt><dd><p>匹配设备的标签。</p></dd><dt id="TEST{八进制模式掩码}"><span class="term"><code class="varname">TEST{<em class="replaceable"><code>八进制模式掩码</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#TEST%7B%E5%85%AB%E8%BF%9B%E5%88%B6%E6%A8%A1%E5%BC%8F%E6%8E%A9%E7%A0%81%7D">¶</a></dt><dd><p>检测指定的文件是否存在。
            如果有必要，还可以额外指定一个八进制的访问模式掩码。</p></dd><dt id="PROGRAM"><span class="term"><code class="varname">PROGRAM</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#PROGRAM">¶</a></dt><dd><p>执行指定的程序并检查返回值，
            如果返回值为零，则匹配成功，否则匹配失败。
            设备的属性会转化为该程序的环境变量供其使用。
            同时该程序的标准输出会被
            自动保存在 <code class="varname">RESULT</code> 键中。</p><p>注意，仅可用于执行时间很短的前台程序。
            参见 <code class="varname">RUN</code></p></dd><dt id="RESULT"><span class="term"><code class="varname">RESULT</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#RESULT">¶</a></dt><dd><p>匹配最近一次 <code class="varname">PROGRAM</code> 程序的输出字符串，
            必须位于
            <code class="varname">PROGRAM</code> 之后(但可出现在同一条规则中)。</p></dd></dl></div><p>可以在用于匹配的"值"中使用shell风格的通配符，
      具体说来就是：</p><div class="variablelist"><dl class="variablelist"><dt id="*"><span class="term">"<code class="literal">*</code>"</span><a class="headerlink" title="Permalink to this term" href="udev.html#*">¶</a></dt><dd><p>匹配任意数量的字符(包括零个)</p></dd><dt id="?"><span class="term">"<code class="literal">?</code>"</span><a class="headerlink" title="Permalink to this term" href="udev.html#?">¶</a></dt><dd><p>匹配单独一个字符</p></dd><dt id="[]"><span class="term">"<code class="literal">[]</code>"</span><a class="headerlink" title="Permalink to this term" href="udev.html#%5B%5D">¶</a></dt><dd><p>匹配中括号内的任意一个字符。
            例如 "<code class="literal">tty[SR]</code>"
            可以匹配 "<code class="literal">ttyS</code>" 或 "<code class="literal">ttyR</code>" 。
            还可以使用 "<code class="literal">-</code>" 符号表示一个区间。
            例如 "<code class="literal">[0-9]</code>"
            可以匹配任意数字。
            如果在左括号 "<code class="literal">[</code>" 后紧接着一个 "<code class="literal">!</code>"
            则表示匹配非括号内的字符。</p></dd><dt id="|"><span class="term">"<code class="literal">|</code>"</span><a class="headerlink" title="Permalink to this term" href="udev.html#%7C">¶</a></dt><dd><p>用于分隔两个可相互替代的匹配模式(也就是"或"的意思)。
            例如 "<code class="literal">abc|x*</code>" 的意思是匹配 "<code class="literal">abc</code>"
            或 "<code class="literal">x*</code>"</p></dd></dl></div><p>下面的键可用于赋值：</p><div class="variablelist"><dl class="variablelist"><dt id="NAME1"><span class="term"><code class="varname">NAME</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#NAME1">¶</a></dt><dd><p>设置网络接口的名称。参见
            <a href="systemd.link.html#"><span class="citerefentry"><span class="refentrytitle">systemd.link</span>(5)</span></a>
            以了解设置网络接口名称的高级机制。
            实际上，udev 并不能直接修改设备节点的名称，
            它只能为设备节点创建额外的符号链接(相当于添加了别名)。</p></dd><dt id="SYMLINK1"><span class="term"><code class="varname">SYMLINK</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#SYMLINK1">¶</a></dt><dd><p>设置指向此设备节点的
            软连接名称。</p><p>软连接的名字中仅允许使用下列字符：
            "<code class="literal">0-9A-Za-z#+-.:=@_/</code>" 、有效的UTF-8字符、
            "<code class="literal">\x00</code>" 风格的十六进制编码(实际的文件名并不转码)。
            其他字符将被替换为 "<code class="literal">_</code>" 字符。</p><p>只需在多个名称之间使用空格分隔，即可一次指定多个软连接名称。
            如果为多个不同的设备指定了相同的软连接，
            那么实际的软连接将指向 link_priority 值最高的设备。
            如果 link_priority 值最高的设备被移除，
            那么该软连接将重新指向下一个 link_priority 值最高的设备，以此类推。
            对于未指定 link_priority 值或者 link_priority 值相等的设备，
            它们之间的顺序是不确定的。</p><p>符号连接的名称必须不能与内核的默认名称相同，
            否则会得到无法预知的结果。
            </p></dd><dt id="OWNER, GROUP, MODE"><span class="term"><code class="varname">OWNER</code>, <code class="varname">GROUP</code>, <code class="varname">MODE</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#OWNER,%20GROUP,%20MODE">¶</a></dt><dd><p>设置设备节点的属主、属组、权限。
            会覆盖内置的默认值。</p></dd><dt id="SECLABEL{模块}"><span class="term"><code class="varname">SECLABEL{<em class="replaceable"><code>模块</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#SECLABEL%7B%E6%A8%A1%E5%9D%97%7D">¶</a></dt><dd><p>设置设备节点的Linux安全模块标签。</p></dd><dt id="ATTR{文件}1"><span class="term"><code class="varname">ATTR{<em class="replaceable"><code>文件</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#ATTR%7B%E6%96%87%E4%BB%B6%7D1">¶</a></dt><dd><p>设置在sysfs中的设备属性。[译者注]大括号中的"文件"是指设备路径(devpath)下的文件。
            例如，对于 /dev/sda1 来说，ATTR{size} 的含义其实是指 /sys/block/sda/sda1/size 文件的内容。</p></dd><dt id="SYSCTL{内核参数}1"><span class="term"><code class="varname">SYSCTL{<em class="replaceable"><code>内核参数</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#SYSCTL%7B%E5%86%85%E6%A0%B8%E5%8F%82%E6%95%B0%7D1">¶</a></dt><dd><p>设置"内核参数"的值。[译者注]所谓"内核参数"其实是指 /proc/sys/ 中的"内核参数"。例如，可以用 SYSCTL{kernel/hostname} 设置 /proc/sys/kernel/hostname 的值。</p></dd><dt id="ENV{属性}"><span class="term"><code class="varname">ENV{<em class="replaceable"><code>属性</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#ENV%7B%E5%B1%9E%E6%80%A7%7D">¶</a></dt><dd><p>设置设备的属性。例如 "DEVTYPE", "ID_PATH", "SYSTEMD_WANTS" 等等。
            [提示]可以通过 udevadm info --query=property /dev/sda 命令查看 /dev/sda 的所有属性。
            如果属性名以 "<code class="literal">.</code>" 开头，那么此属性将不会被记录到udev数据库中，
            也不会被导出为环境变量(例如 <code class="varname">PROGRAM</code>)。</p></dd><dt id="TAG1"><span class="term"><code class="varname">TAG</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#TAG1">¶</a></dt><dd><p>设置设备的标签。
            用于为libudev监视(monitor)功能的用户
            过滤事件或者枚举已标记的设备。
            标签仅在与特殊的设备过滤器一起使用时才有意义，
            千万不要用于常规目的。
            滥用标签将会导致设备事件处理效率显著下降，
            所以应该尽量避免为设备设置标签。</p></dd><dt id="RUN{类型}"><span class="term"><code class="varname">RUN{<em class="replaceable"><code>类型</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#RUN%7B%E7%B1%BB%E5%9E%8B%7D">¶</a></dt><dd><p>对于每一个设备事件来说，在处理完所有udev规则之后，
            都可以再接着执行一个由此键设置的程序列表(默认为空)。
            不同的"<code class="literal">类型</code>"含义如下：</p><div class="variablelist"><dl class="variablelist"><dt id="program"><span class="term">"<code class="literal">program</code>"</span><a class="headerlink" title="Permalink to this term" href="udev.html#program">¶</a></dt><dd><p>一个外部程序，
                  如果是相对路径，
                  那么视为相对于 <code class="filename">/usr/lib/udev</code> 目录。
                  否则必须使用绝对路径。</p><p>如果未明确指定"<code class="literal">类型</code>"，
                  那么这是默认值。</p></dd><dt id="builtin"><span class="term">"<code class="literal">builtin</code>"</span><a class="headerlink" title="Permalink to this term" href="udev.html#builtin">¶</a></dt><dd><p>与 <code class="varname">program</code> 类似，
                  但是仅用于表示内置的程序。</p></dd></dl></div><p>程序名与其参数之间用空格分隔。
            如果参数中含有空格，那么必须使用单引号(')界定。</p><p>仅可使用运行时间非常短的前台程序，
            切勿设置任何
            后台守护进程或者长时间运行的程序。</p><p>设备事件处理完成之后，
            所有派生的进程(无论是否已经分离)，
            都将会被无条件的杀死。</p><p>注意，禁止在 udev 规则中运行访问网络、或挂载/卸载文件系统的程序，
            因为在 <code class="filename">systemd-udevd.service</code>
            中强制使用了默认沙盒机制。</p></dd><dt id="LABEL"><span class="term"><code class="varname">LABEL</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#LABEL">¶</a></dt><dd><p>设置一个可用作 <code class="varname">GOTO</code> 跳转目标的标签。</p></dd><dt id="GOTO"><span class="term"><code class="varname">GOTO</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#GOTO">¶</a></dt><dd><p>跳转到下一个匹配的 <code class="varname">LABEL</code> 标签所在的规则。</p></dd><dt id="IMPORT{类型}"><span class="term"><code class="varname">IMPORT{<em class="replaceable"><code>类型</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#IMPORT%7B%E7%B1%BB%E5%9E%8B%7D">¶</a></dt><dd><p>将一组变量导入为设备的属性。
            不同的"<code class="literal">类型</code>"含义如下：</p><div class="variablelist"><dl class="variablelist"><dt id="program1"><span class="term">"<code class="literal">program</code>"</span><a class="headerlink" title="Permalink to this term" href="udev.html#program1">¶</a></dt><dd><p>执行一个外部程序，
                  并且当其返回值为零时导入其输出内容。
                  注意，输出内容的每一行都必须符合"key=value"格式。
                  关于程序路径、命令与参数分隔符、引号的使用规则、程序执行时间，等等，
                  都与 <code class="varname">RUN</code> 相同。</p></dd><dt id="builtin1"><span class="term">"<code class="literal">builtin</code>"</span><a class="headerlink" title="Permalink to this term" href="udev.html#builtin1">¶</a></dt><dd><p>与 "<code class="literal">program</code>" 类似，
                  但是仅用于执行内置的程序。</p></dd><dt id="file"><span class="term">"<code class="literal">file</code>"</span><a class="headerlink" title="Permalink to this term" href="udev.html#file">¶</a></dt><dd><p>导入一个文本文件的内容。该文本文件的每一行都必须符合"key=value"格式。
                  以"#"开头的行将被视为注释而忽略。</p></dd><dt id="db"><span class="term">"<code class="literal">db</code>"</span><a class="headerlink" title="Permalink to this term" href="udev.html#db">¶</a></dt><dd><p>从当前已有的udev数据库中导入一个单独的属性。
                  仅可用于udev数据库确实
                  已经被早先的设备事件所填充的情形。</p></dd><dt id="cmdline"><span class="term">"<code class="literal">cmdline</code>"</span><a class="headerlink" title="Permalink to this term" href="udev.html#cmdline">¶</a></dt><dd><p>从内核引导选项导入一个单独的属性。对于那些仅有单独的标记而没有值的属性，
                  其值将被指定为 "<code class="literal">1</code>" 。</p></dd><dt id="parent"><span class="term">"<code class="literal">parent</code>"</span><a class="headerlink" title="Permalink to this term" href="udev.html#parent">¶</a></dt><dd><p>从父设备导入已有的属性(包括对应的值)。
                  可以将
                  <code class="option">IMPORT{parent}</code> 赋值为shell风格的匹配模式，
                  以导入
                  多个属性名称与匹配模式相符的属性。</p></dd></dl></div><p>仅可使用运行时间非常短的前台程序，切勿设置任何后台守护进程或者长时间运行的程序。
            参见 <code class="option">RUN</code></p></dd><dt id="OPTIONS"><span class="term"><code class="varname">OPTIONS</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#OPTIONS">¶</a></dt><dd><p>规则与设备的选项：</p><div class="variablelist"><dl class="variablelist"><dt id="link_priority=value"><span class="term"><code class="option">link_priority=<em class="replaceable"><code>value</code></em></code></span><a class="headerlink" title="Permalink to this term" href="udev.html#link_priority=value">¶</a></dt><dd><p>指定创建符号链接时的优先级。
                  数值越大优先级越高。默认值是"0"。</p></dd><dt id="string_escape=none|replace"><span class="term"><code class="option">string_escape=<em class="replaceable"><code>none|replace</code></em></code></span><a class="headerlink" title="Permalink to this term" href="udev.html#string_escape=none%7Creplace">¶</a></dt><dd><p>在对设备进行命名时，如何处理设备名字中的非常规字符(比如控制字符与不安全的字符)。
                  none 表示不做处理，保持原样；
                  replace 表示将这些非常规字符替换为"_"(下划线)。</p></dd><dt id="static_node="><span class="term"><code class="option">static_node=</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#static_node=">¶</a></dt><dd><p>将本条规则设定的权限
                  应用到此选项指定的静态设备节点上。
                  同时，如果在本规则中指定了标签(tag)，
                  那么还会在
                  <code class="filename">/run/udev/static_node-tags/<em class="replaceable"><code>tag</code></em></code>
                  目录中创建一个指向该静态设备节点的软连接。
                  注意，在 systemd-udevd 启动之前，
                  静态设备节点就已经由 systemd-tmpfiles 创建完成了。
                  创建静态设备节点时，并不要求存在对应的内核设备，
                  因为当这些设备节点被访问时，会触发内核模块的自动加载功能。</p></dd><dt id="watch"><span class="term"><code class="option">watch</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#watch">¶</a></dt><dd><p>使用文件系统的 inotify 功能监视设备节点。
                  当节点被打开并写入之后又被关闭，
                  将会触发一个"设备状态已变化"的事件。</p></dd><dt id="nowatch"><span class="term"><code class="option">nowatch</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#nowatch">¶</a></dt><dd><p>禁用针对设备节点的 inotify 监视功能。</p></dd><dt id="db_persist"><span class="term"><code class="option">db_persist</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#db_persist">¶</a></dt><dd><p>在事件设备的 udev 数据库项上设置
                  粘滞位(sticky bit)。
                  这样，即使调用了
                  <span class="command"><strong>udevadm info --cleanup-db</strong></span> 命令，
                  设备的属性也依然会保存在数据库中。
                  在某些情况下(例如 Device Mapper 设备)，
                  此选项可用于从 initramfs 切换至真实的根文件系统时，依然保持设备的状态。</p></dd></dl></div></dd></dl></div><p><code class="varname">NAME</code>, <code class="varname">SYMLINK</code>,
      <code class="varname">PROGRAM</code>, <code class="varname">OWNER</code>,
      <code class="varname">GROUP</code>, <code class="varname">MODE</code>, <code class="varname">SECLABEL</code>,
      <code class="varname">RUN</code> 都支持简单的字符串替换。
      <code class="varname">RUN</code> 的替换发生在
      所有规则全部处理完成之后、程序将要执行之前，
      因此可以使用由匹配成功的规则所设置的设备属性。
      而其他键的替换发生在该键所在规则被处理完成的当时。
      可用的替换标记如下：</p><div class="variablelist"><dl class="variablelist"><dt id="$kernel, %k"><span class="term"><code class="option">$kernel</code>, <code class="option">%k</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#%24kernel,%20%k">¶</a></dt><dd><p>设备的内核名称</p></dd><dt id="$number, %n"><span class="term"><code class="option">$number</code>, <code class="option">%n</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#%24number,%20%n">¶</a></dt><dd><p>设备在内核中的序号。例如，对于
              "<code class="literal">sda3</code>" 来说，此值为 "<code class="literal">3</code>"
            </p></dd><dt id="$devpath, %p"><span class="term"><code class="option">$devpath</code>, <code class="option">%p</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#%24devpath,%20%p">¶</a></dt><dd><p>设备路径(devpath)。也就是该设备在sysfs文件系统下的相对路径。例如，/dev/sda1 对应的设备路径是 /block/sda/sda1 (一般对应着 /sys/block/sda/sda1 目录)。</p></dd><dt id="$id, %b"><span class="term"><code class="option">$id</code>, <code class="option">%b</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#%24id,%20%b">¶</a></dt><dd><p>被
               <code class="option">SUBSYSTEMS</code>, <code class="option">KERNELS</code>,
              <code class="option">DRIVERS</code>, <code class="option">ATTRS</code> 成功匹配到的设备的设备名称
            </p></dd><dt id="$driver"><span class="term"><code class="option">$driver</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#%24driver">¶</a></dt><dd><p>被
               <code class="option">SUBSYSTEMS</code>,
              <code class="option">KERNELS</code>, <code class="option">DRIVERS</code>,
              <code class="option">ATTRS</code> 成功匹配到的设备的驱动名称
            </p></dd><dt id="$attr{文件}, %s{文件}"><span class="term"><code class="option">$attr{<em class="replaceable"><code>文件</code></em>}</code>, <code class="option">%s{<em class="replaceable"><code>文件</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#%24attr%7B%E6%96%87%E4%BB%B6%7D,%20%s%7B%E6%96%87%E4%BB%B6%7D">¶</a></dt><dd><p>在规则匹配成功时，
              设备路径(devpath)下"文件"的内容(用于表示设备的属性)。
              如果该设备路径下没有此文件，则从先前 <code class="option">KERNELS</code>,
              <code class="option">SUBSYSTEMS</code>, <code class="option">DRIVERS</code>,
              <code class="option">ATTRS</code>
              匹配的父设备中提取。
            </p><p>如果"文件"是一个软连接，
              则一直追踪软连接到最终的实际文件。
            </p></dd><dt id="$env{属性}, %E{属性}"><span class="term"><code class="option">$env{<em class="replaceable"><code>属性</code></em>}</code>, <code class="option">%E{<em class="replaceable"><code>属性</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#%24env%7B%E5%B1%9E%E6%80%A7%7D,%20%E%7B%E5%B1%9E%E6%80%A7%7D">¶</a></dt><dd><p>设备的属性值。例如 "DEVTYPE", "ID_PATH", "SYSTEMD_WANTS" 等等。[提示]可以通过 udevadm info --query=property /dev/sda 命令查看 /dev/sda 的所有属性。</p></dd><dt id="$major, %M"><span class="term"><code class="option">$major</code>, <code class="option">%M</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#%24major,%20%M">¶</a></dt><dd><p>设备的主设备号</p></dd><dt id="$minor, %m"><span class="term"><code class="option">$minor</code>, <code class="option">%m</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#%24minor,%20%m">¶</a></dt><dd><p>设备的次设备号</p></dd><dt id="$result, %c"><span class="term"><code class="option">$result</code>, <code class="option">%c</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#%24result,%20%c">¶</a></dt><dd><p>外部程序
            <code class="varname">PROGRAM</code>
            的输出字符串。
            可以使用 "<code class="literal">%c{N}</code>" 提取第N个子字符串(以空格为分隔符，从"1"开始计数)。
            也可以通过 "<code class="literal">%c{N+}</code>"(也就是在数字后附加一个 "<code class="literal">+</code>")提取
            从第N个子字符串开始一直到结尾的部分。</p></dd><dt id="$parent, %P"><span class="term"><code class="option">$parent</code>, <code class="option">%P</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#%24parent,%20%P">¶</a></dt><dd><p>父设备的节点名称</p></dd><dt id="$name"><span class="term"><code class="option">$name</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#%24name">¶</a></dt><dd><p>设备的当前名称。如果没有被任何udev规则修改，
            那么等于该设备的内核名称。</p></dd><dt id="$links"><span class="term"><code class="option">$links</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#%24links">¶</a></dt><dd><p>一个空格分隔的软链接名称列表，这些软链接都指向该设备的节点。
            该值仅在两种情况下存在：(1)发生"remove"事件；(2)先前的规则已对 SYMLINK 赋值。</p></dd><dt id="$root, %r"><span class="term"><code class="option">$root</code>, <code class="option">%r</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#%24root,%20%r">¶</a></dt><dd><p>udev_root 的值</p></dd><dt id="$sys, %S"><span class="term"><code class="option">$sys</code>, <code class="option">%S</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#%24sys,%20%S">¶</a></dt><dd><p>sysfs 文件系统的挂载点</p></dd><dt id="$devnode, %N"><span class="term"><code class="option">$devnode</code>, <code class="option">%N</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#%24devnode,%20%N">¶</a></dt><dd><p>设备节点的名称(也就是设备文件的名称)</p></dd><dt id="%%"><span class="term"><code class="option">%%</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#%%">¶</a></dt><dd><p>百分号 "<code class="literal">%</code>" 自身</p></dd><dt id="$$"><span class="term"><code class="option">$$</code></span><a class="headerlink" title="Permalink to this term" href="udev.html#%24%24">¶</a></dt><dd><p>美元符号 "<code class="literal">$</code>" 自身</p></dd></dl></div></div><div class="refsect1"><a name="id-1.6"></a><h2 id="参见">参见<a class="headerlink" title="Permalink to this headline" href="udev.html#%E5%8F%82%E8%A7%81">¶</a></h2><p>
      <a href="systemd-udevd.service.html#"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a>,
      <a href="udevadm.html#"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a>,
      <a href="systemd.link.html#"><span class="citerefentry"><span class="refentrytitle">systemd.link</span>(5)</span></a>
    </p></div></div></body></html>
